from flask import Blueprint, render_template, jsonify, request
from models import HouseInfo
from sqlalchemy import func
index_page = Blueprint('index_page', __name__)


@index_page.route('/')
def index():
    house_total_num = HouseInfo.query.count()
    print(house_total_num)
    house_new_list = HouseInfo.query.order_by(HouseInfo.publish_time.desc()).limit(6).all()
    print(house_new_list)
    house_hot_list = HouseInfo.query.order_by(HouseInfo.page_views.desc()).limit(4).all()
    print(house_hot_list)
    return render_template('index.html',
                           num=house_total_num,
                           HouseInfo_new_list=house_new_list,
                           HouseInfo_hot_list=house_hot_list)


@index_page.route('/search/keyword/', methods=['POST'])
def search_kw():  # 在index＿page.py文件中定义视图函数search_kw()，用于获取用户在输入框中输入的关键字和用户选择的搜索选项
    # 根据关键字查询对应的房源数据，并将查询到的房源数据按照指定的JSON格式进行返回。
    kw = request.form['kw']  # 获取搜索关键词
    info = request.form['info']  # 获取用户选择的搜索选项
    if info == '地区搜索':
        # 获取查询的结果
        house_data = HouseInfo.query.with_entities(
            HouseInfo.address, func.count()).filter(HouseInfo.address.contains(kw))
        # 对查询的结果进行分组，排序，并获取最多9条房源数据
        result = house_data.group_by('address').order_by(
            func.count().desc()).limit(9).all()
        if len(result):  # 有查询的结果
            data = []
            for i in result:
                # 将查询结果转换为字典格式，并添加到date列表中
                data.append({'t_name': i[0], 'num': i[1]})
            return jsonify({'code': 1, 'info': data})
        else:  # 没有查询到结果
            return jsonify({'code': 0, 'info': []})
    if info == '户型搜索':
        house_data_data = HouseInfo.query.with_entities(
            HouseInfo.rooms, func.count()).filter(HouseInfo.address.contains(kw))
        result = house_data_data.group_by('rooms').order_by(
            func.count().desc()).limit(9).all()
        if len(result):
            data = []
            for i in result:
                data.append({'t_name': i[0], 'num': i[1]})
            return jsonify({'code': 1, 'info': data})
        else:
            return jsonify({'code': 0, 'info': []})
